package com.ruoyi.level.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.circle.domain.CircleBasicInfo;
import com.ruoyi.level.domain.PointsLevelRule;

/**
 * 用户积分等级规则Mapper接口
 * 
 * @author 区嘉盛
 * @date 2025-06-16
 */
public interface PointsLevelRuleMapper extends BaseMapper<PointsLevelRule>
{
    /**
     * 查询用户积分等级规则
     * 
     * @param id 用户积分等级规则主键
     * @return 用户积分等级规则
     */
    public PointsLevelRule selectPointsLevelRuleById(Long id);

    /**
     * 查询用户积分等级规则列表
     * 
     * @param pointsLevelRule 用户积分等级规则
     * @return 用户积分等级规则集合
     */
    public List<PointsLevelRule> selectPointsLevelRuleList(PointsLevelRule pointsLevelRule);

    /**
     * 新增用户积分等级规则
     * 
     * @param pointsLevelRule 用户积分等级规则
     * @return 结果
     */
    public int insertPointsLevelRule(PointsLevelRule pointsLevelRule);

    /**
     * 修改用户积分等级规则
     * 
     * @param pointsLevelRule 用户积分等级规则
     * @return 结果
     */
    public int updatePointsLevelRule(PointsLevelRule pointsLevelRule);

    /**
     * 批量停用用户积分等级规则
     *
     * @param ids 需要停用的数据主键集合
     * @return 结果
     */
    public int disablePointsLevelRuleByIds(Long[] ids);

    /**
     * 停用用户积分等级规则
     *
     * @param id 用户积分等级规则主键
     * @return 结果
     */
    public int disablePointsLevelRuleById(Long id);

    /**
     * 批量启用用户积分等级规则
     *
     * @param ids 需要启用的数据主键集合
     * @return 结果
     */
    public int enablePointsLevelRuleByIds(Long[] ids);

    /**
     * 启用用户积分等级规则
     *
     * @param id 用户积分等级规则主键
     * @return 结果
     */
    public int enablePointsLevelRuleById(Long id);

    /**
     * 检查指定等级体系下是否存在相同排序号
     * 
     * @param systemName 等级体系名称
     * @param sortOrder 排序号
     * @return 存在的记录数
     */
    public int checkSortOrderExists(String systemName, Long sortOrder);

    /**
     * 检查指定等级体系下是否存在相同等级名称
     * 
     * @param systemName 等级体系名称
     * @param levelName 等级名称
     * @return 存在的记录数
     */
    public int checkLevelNameExists(String systemName, String levelName);
    
    /**
     * 检查指定等级体系下是否存在相同排序号（排除指定ID的记录）
     * 
     * @param systemName 等级体系名称
     * @param sortOrder 排序号
     * @param excludeId 要排除的记录ID
     * @return 存在的记录数
     */
    public int checkSortOrderExistsExcludeId(String systemName, Long sortOrder, Long excludeId);

    /**
     * 检查指定等级体系下是否存在相同等级名称（排除指定ID的记录）
     * 
     * @param systemName 等级体系名称
     * @param levelName 等级名称
     * @param excludeId 要排除的记录ID
     * @return 存在的记录数
     */
    public int checkLevelNameExistsExcludeId(String systemName, String levelName, Long excludeId);
    
    /**
     * 获取指定等级体系下排序号小于给定排序号的最大排序号的记录
     * 
     * @param systemName 等级体系名称
     * @param sortOrder 排序号
     * @return 等级规则
     */
    public PointsLevelRule selectLowerLevelRule(String systemName, Long sortOrder);
    
    /**
     * 获取指定等级体系下排序号大于给定排序号的最小排序号的记录
     * 
     * @param systemName 等级体系名称
     * @param sortOrder 排序号
     * @return 等级规则
     */
    public PointsLevelRule selectHigherLevelRule(String systemName, Long sortOrder);

    /**
     * 获取所有不同的等级体系名称
     *
     * @return 等级体系名称列表
     */
    public List<String> selectAllSystemNames();

    /**
     * 检查指定等级体系下是否存在无上限等级（排除指定ID的记录）
     *
     * @param systemName 等级体系名称
     * @param unlimitedValue 无上限的值
     * @param excludeId 要排除的记录ID，可以为null
     * @return 存在的记录数
     */
    public int checkUnlimitedLevelExists(String systemName, Long unlimitedValue, Long excludeId);
}
